/**
 * 
 */
package fbv.distribuidora.produto.negocio;

import java.math.BigDecimal;
import java.util.Map;

import fbv.commun.dataTools.negocio.ControladorImpl;
import fbv.commun.dataTools.negocio.EntidadeDAO;
import fbv.commun.dataTools.negocio.ObjetoVOIpml;
import fbv.commun.dataTools.servico.EntidadePadrao;
import fbv.commun.dataTools.servico.ObjetoVO;
import fbv.commun.excecoes.FBVException;
import fbv.commun.util.Util;
import fbv.distribuidora.fornecedor.negocio.ControladorFornecedorImpl;
import fbv.distribuidora.fornecedor.negocio.FornecedorDAO;
import fbv.distribuidora.fornecedor.servico.ControladorFornecedor;
import fbv.distribuidora.fornecedor.servico.Fornecedor;
import fbv.distribuidora.produto.servico.ControladorProduto;
import fbv.distribuidora.produto.servico.Produto;

/**
 * @author Lenildo
 *
 */
public class ControladorProdutoImpl extends ControladorImpl implements
		ControladorProduto {

	public ControladorProdutoImpl(){
		
	}
	
	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.ControladorImpl#getEntidadeDAO()
	 */
	@Override
	protected EntidadeDAO getEntidadeDAO() {
		return ProdutoDAO.getInstancia();
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.produto.servico.ControladorProduto#criaProduto()
	 */
	public Produto criaProduto() {
		return (Produto) getEntidadeDAO().criarEntidade();
	}

	public static ControladorProduto getInstancia() {
		return new ControladorProdutoImpl();
	}

	/**
	 * @param Map campos
	 * @throws FBVException 
	 * @throws NumberFormatException
	 * @return EntidadePadrao 
	 */
	protected EntidadePadrao montarEntidadePadao(Map<String, String> campos) throws NumberFormatException, FBVException {
		Produto produto = criaProduto();
		ControladorFornecedorImpl controladorFornecedor = new ControladorFornecedorImpl();
		
		if(campos.containsKey(Produto.FORM_PRODUTO_ID)){
			produto.setId(Integer.parseInt(campos.get(Produto.FORM_PRODUTO_ID)));
		}
		produto.setNome(campos.get(Produto.FORM_PRODUTO_NOME));
		produto.setFornecedor((Fornecedor)FornecedorDAO.getInstancia().selecionar(Integer.parseInt((String)campos.get(Produto.FORM_PRODUTO_FORNECEDOR)), false));
		produto.setDescricao(campos.get(Produto.FORM_PRODUTO_DESCRICAO));
		produto.setImagemUri(campos.get(Produto.FORM_PRODUTO_IMAGEM_URI));
		produto.setPreco(BigDecimal.valueOf(Double.parseDouble(campos.get(Produto.FORM_PRODUTO_PRECO))));
		produto.setQtdEstoque(Integer.parseInt(campos.get(Produto.FORM_PRODUTO_QTD_ESTOQUE)));
				
		//TODO [lenildo.mn] falta atributos.
		
		return produto;
	}

	@Override
	protected ObjetoVO montarObjetoVO(EntidadePadrao entidade) {
			
		if (entidade == null) {
			throw new IllegalArgumentException("Parametro Nulo");
		}
		ObjetoVO produtoVO = new ObjetoVOIpml();
		Produto produto = (Produto) entidade;
		
		if (Util.isCampoPreenchido(produto.getId())){
			produtoVO.setChave(produto.getId().toString());
		}
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_NOME, produto.getNome());
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_DESCRICAO, produto.getDescricao());
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_FORNECEDOR, produto.getFornecedor().getId().toString());
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_IMAGEM_URI, produto.getImagemUri());
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_PRECO, produto.getPreco().toString());
		produtoVO.adicinarPropriedade(Produto.FORM_PRODUTO_QTD_ESTOQUE, produto.getQtdEstoque().toString());
				
		return produtoVO;
	}	
}
